/** ***********************************************************************************
* @file         fota.h
* @brief        升级部分
* @details      
* @author       
* @date         2021/3
* @copyright    北京高知科技有限公司    
* @version      V1.0
* @attention    无
**************************************************************************************/
#ifndef __FOTA_H
#define __FOTA_H

#include "fibo_opencpu.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "os_app.h"
#include "n808_app.h"

#define FOTA_APP_NAME   	"appota-thread"
#define FOTA_FIRMWARE_NAME  "firmota-thread"
#define FOTA_HTPP_NAME  	"http-thread"

#define MCU_HTTP_FILE    "/FFS/httpgd"

#define FOTA_MAX_URLLENGTH	256		//定义最长服务器地址长度
#define FOTA_MAX_TAG        30
#define FOTA_MAX_MD5        33
extern GaozSemaphoreHandle_t   fota_mutex;

#pragma pack(1)
typedef struct
{
		//uint8_t serveradrlen;
		uint8_t serveradr[FOTA_MAX_URLLENGTH];
		//uint8_t versionLen;
		uint8_t version[FOTA_MAX_TAG];
		//uint8_t version_GD[FOTA_MAX_TAG];
        uint8_t tag[FOTA_MAX_TAG];
		uint8_t md5[FOTA_MAX_MD5];
		//uint8_t md5_GD[FOTA_MAX_MD5];
		
}ota_msg_t;

//升级mcu
typedef struct
{
	 uint8_t upgrade_flag;  
	 uint32_t upgrade_total;  
} ota_mcu_notify_t;
typedef struct
{
	 uint16_t req_curnum;  
	 uint16_t req_total; 
	 uint16_t req_length;  
} ota_mcu_request_t;

typedef enum
{
    VER_MAJOR = 0,
    VER_MINOR,
    VER_NUMBER,
	VER_MOTORCYCLE,
	VER_HARDWARE,
	VER_FIRMWARE,
    VER_PROJECT,
}ver_property_e;
typedef enum
{
    L610_FIRMWARE = 0,
	L610_APP ,
	L610_MCU ,
}l610_class_e;
/** ****************************************************************************
* @remarks       void fota_init( void )
* @brief         
* @param[in]     无
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
extern void fota_init( void );

/** ****************************************************************************
* @remarks      void fota_app(void *param)
* @brief        APP升级 
* @param[in]     *param
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
//extern void fota_app(void *param);

/** ****************************************************************************
* @remarks      void fota_firmware(void *param)
* @brief        固件升级 
* @param[in]     *param
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
//extern void fota_firmware(void *param);

/** ****************************************************************************
* @remarks       int cjson_parseurl(char *da, uint16_t len)
* @brief         解析平台升级链接
* @param[in]     *da 获取的数据地址
* @param[in]     len 长度
* @param[out]    无
* @return        0 成功 1 失败 2 无效
* @attention     无
*******************************************************************************/
extern int cjson_parseurl(char *da,uint16_t len,upgrade_url_e url_type);
/** ****************************************************************************
* @remarks      void fota_manage(void *param)
* @brief        升级接口调用 
* @param[in]     
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
extern void fota_manage(terminal_ota_t *ota_handle);
/** ****************************************************************************
* @remarks      void fota_checkversion(void)
* @brief        升级保存数据校验 
* @param[in]     
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
extern void fota_checkversion(void);
//extern void split_softwareversion(uint8_t *in,uint16_t len,ver_property_e part, uint8_t *out);


#endif